package com.ctrlcar.giftrecord.service.impl;

import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;

import com.ctrlcar.giftrecord.dto.SendGiftDTO;
import com.ctrlcar.giftrecord.mapper.SendGiftMapper;
import com.ctrlcar.giftrecord.pojo.Relative;
import com.ctrlcar.giftrecord.pojo.SendGift;
import com.ctrlcar.giftrecord.pojo.model.Result;
import com.ctrlcar.giftrecord.service.RelativeService;
import com.ctrlcar.giftrecord.service.SendGiftService;
import com.ctrlcar.giftrecord.vo.SendGiftVo;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;

/**
* @author
* @description 针对表【send_gift】的数据库操作Service实现
* @createDate 2025-03-26 16:43:36
*/
@Service
public class SendGiftServiceImpl extends ServiceImpl<SendGiftMapper, SendGift>
    implements SendGiftService {
    @Resource
    private RelativeService relativeService;

    /**
     * 根据用户名和地址创建送礼记录
     * @param sendGiftDTO
     * @return
     */
//    DOTO:
    @Override
    @Transactional
    public String addSendGift(SendGiftDTO sendGiftDTO) {
        //1.根据姓名和用户id查找 亲朋对象可能是个列表
        LambdaQueryWrapper<Relative> query = new LambdaQueryWrapper<>();
        query.eq(Relative::getName, sendGiftDTO.getRelativeName());
        query.eq(Relative::getUserId, sendGiftDTO.getUserId());
        List<Relative> relatives = relativeService.list(query);
        if (relatives.size() < 1){
            // 2. 没有找到
            // 2.1 新建亲朋 + 新建送礼记录
            Relative newRelative = new Relative();
            newRelative.setUserId(sendGiftDTO.getUserId());
            newRelative.setName(sendGiftDTO.getRelativeName());
            newRelative.setAddress(sendGiftDTO.getAddress());
            newRelative.setRemark("");
            relativeService.save(newRelative);
            // 创建送礼记录
            return createSendGiftRecord(sendGiftDTO, newRelative.getRelativeId());
        }else {
            if (sendGiftDTO.getAddress()!=null && !sendGiftDTO.getAddress().isEmpty()) {//有输入地址
//                循环判断是否跟其中一项相同
                for (Relative relative : relatives) {
                    //有找到相同的-------
                    if (relative.getAddress() != null && relative.getAddress().equals(sendGiftDTO.getAddress())) {
                        // 地址匹配，创建该亲朋的送礼记录
                        return createSendGiftRecord(sendGiftDTO, relative.getRelativeId());
                    }else {
                        //没有找到-----------创建新亲朋+送礼记录
                        // 2.1 新建亲朋 + 新建送礼记录
                        Relative newRelative = new Relative();
                        newRelative.setUserId(sendGiftDTO.getUserId());
                        newRelative.setName(sendGiftDTO.getRelativeName());
                        newRelative.setAddress(sendGiftDTO.getAddress());
                        newRelative.setRemark("");
                        relativeService.save(newRelative);
                        // 创建送礼记录
                        return createSendGiftRecord(sendGiftDTO, newRelative.getRelativeId());
                    }
                }
            }
//
            return "已有同名亲朋，请输入详细地址";
        }

        //3.找到
//        if (sendGiftDTO.getAddress() == null|| sendGiftDTO.getAddress().isEmpty()){
//            // 3.1 传进来的地址没有写 => 请输入地址
//            return "已有同名亲朋，请输入详细地址";
//        }else {
//            // 3.2 有地址，检查是否与某一亲朋匹配
//            for (Relative relative : relatives) {
//                if (relative.getAddress() != null && relative.getAddress().equals(sendGiftDTO.getAddress())) {
//                    // 地址匹配，创建该亲朋的送礼记录
//                    return createSendGiftRecord(sendGiftDTO, relative.getRelativeId());
//                }
//            }
//            // 3.3 有地址+没有匹配到 => 新建亲朋 + 新建送礼记录
//            Relative newRelative = new Relative();
//            newRelative.setUserId(sendGiftDTO.getUserId());
//            newRelative.setName(sendGiftDTO.getRelativeName());
//            newRelative.setAddress(sendGiftDTO.getAddress());
//            relativeService.save(newRelative);
//            // 创建送礼记录
//            return createSendGiftRecord(sendGiftDTO, newRelative.getRelativeId());
//
//        }
            //3.1传进来的地址有没有写=》请输入地址
            //3.2有地址 跟某一为亲朋匹配 =》 创建该亲朋的送礼记录
            //3.3没有匹配到 =》新建该亲朋+新建送礼记录
    }
//    /**
//     * 根据用户id查询送礼记录
//     * @param userId
//     * @return
//     */
//    @Override
//    public Result<List<SendGiftVo>> getAllByUserId(Integer userId) {
//        LambdaQueryWrapper<SendGift> queryWrapper = new LambdaQueryWrapper<>();
//        queryWrapper.eq(SendGift::getUserId,userId);
//        List<SendGift> list = list(queryWrapper);
//        List<SendGiftVo> sendGiftVoList =new ArrayList<>();
//        //根据查到了relativeId查询名字
//        for (SendGift sendGift : list) {
//            Relative relative = relativeService.getById(sendGift.getRelativeId());
//            SendGiftVo sendGiftVo = BeanUtil.copyProperties(sendGift, SendGiftVo.class);
//            sendGiftVo.setRelativeName(relative.getName());
//            sendGiftVoList.add(sendGiftVo);
//        }
//        return Result.success(sendGiftVoList);
//    }
@Override
public Result<List<SendGiftVo>> getAllByUserId(Integer userId, String sel) {
    LambdaQueryWrapper<SendGift> queryWrapper = new LambdaQueryWrapper<>();
    queryWrapper.eq(SendGift::getUserId, userId);
    // 如果 giftName 不为空，则添加模糊查询条件
//    if (sel != null && !sel.isEmpty()) {
//        queryWrapper.like(SendGift::getGiftName, sel);
//    }

//    LambdaQueryWrapper<SendGift> queryWrapper1 = new LambdaQueryWrapper<>();
//    queryWrapper1.eq(SendGift::getUserId, userId);
//    // 如果 address 不为空，则添加模糊查询条件
//    if (sel != null && !sel.trim().isEmpty()) {
//        queryWrapper1.like(SendGift::getAddress, sel);
//    }

    // 查询数据库
    List<SendGift> list = list(queryWrapper);
//    List<SendGift> list1 = list(queryWrapper1);
//    list.addAll(list1);
    List<SendGiftVo> sendGiftVoList = new ArrayList<>();

    // 根据查到的 relativeId 查询名字
    for (SendGift sendGift : list) {
        Relative relative = relativeService.getById(sendGift.getRelativeId());
        SendGiftVo sendGiftVo = BeanUtil.copyProperties(sendGift, SendGiftVo.class);
        sendGiftVo.setRelativeName(relative.getName());
        //根据setRelativeName模糊查询放入新列表中
        if (sel != null && !sel.isEmpty()) {
            if (sendGiftVo.getRelativeName().contains(sel)) {
                sendGiftVoList.add(sendGiftVo);
            }
        }else {
            sendGiftVoList.add(sendGiftVo);
        }
//        sendGiftVoList.add(sendGiftVo);
    }

    return Result.success(sendGiftVoList);
}

    /**
     *  根据送礼记录id删除送礼记录
     * @param sendGiftId
     * @return
     */
    @Override
    public Result delectBySendGiftId(Integer sendGiftId) {
        if (removeById(sendGiftId)){
            return Result.success();
        }
        return Result.error("删除失败");
    }

    /**
     * 创建送礼记录
     *
     * @param sendGiftDTO
     * @param relativeId
     * @return
     */
    private String createSendGiftRecord(SendGiftDTO sendGiftDTO, Integer relativeId) {
        SendGift sendGift = new SendGift();
        BeanUtil.copyProperties(sendGiftDTO, sendGift);
        sendGift.setRelativeId(relativeId);
        boolean save = save(sendGift);
        if (save){
            return "送礼成功";
        }else {
            return "送礼失败";
        }
    }
}




